package cc.rengu.igas.bsps.common.dao;

import cc.rengu.igas.bsps.common.entity.MchntBaseInfo;
import cc.rengu.oltp.utility.bean.PageInfo;
import cc.rengu.oltp.utility.bean.PageResult;

import java.util.List;

/**
 * 操作商户基础信息表接口 on 2020/2/25.
 */
public interface BspsMchntBaseInfoMapper {

    /**
     * 根据非业务主键查询商户基本信息
     *
     * @param instId 多法人标识
     * @param id     非业务主键
     * @return 商户基本信息
     * @throws Exception 异常
     */
    MchntBaseInfo selectBspsMchntBaseInfoById(String instId, String id) throws Exception;

    /**
     * 根据主键查询商户基本信息
     *
     * @param instId  多法人标识
     * @param mchntNo 商户号
     * @return 商户基本信息
     * @throws Exception 异常
     */
    MchntBaseInfo selectBspsMchntBaseInfoByPrimaryKey(String instId, String mchntNo) throws Exception;

    /**
     * 根据商户号或商户名称模糊查询商户基本信息
     *
     * @param instId    多法人标识
     * @param mchntNo   商户号
     * @param mchntName 商户名称
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectBspsMchntBaseInfoByMchntNoOrMchntName(String instId, String mchntNo, String mchntName) throws Exception;

    /**
     * 根据连锁商户号查询商户基本信息
     *
     * @param instId       多法人标识
     * @param chainMchntNo 连锁商户号
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectBspsMchntBaseInfoByChainMchntNo(String instId, String chainMchntNo) throws Exception;

    /**
     * 根据平台商户号查询商户基本信息
     *
     * @param instId      多法人标识
     * @param platMchntNo 平台商户号
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectBspsMchntBaseInfoByPlatMchntNo(String instId, String platMchntNo) throws Exception;

    /**
     * 根据平台商户号查询商户统计信息
     *
     * @param instId      多法人标识
     * @param platMchntNo 平台商户号
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectBspsMchntBaseInfoGroupByPlatMchntNo(String instId, String platMchntNo, String startDate, String endDate) throws Exception;

    /**
     * 根据集团商户号查询商户基本信息
     *
     * @param instId       多法人标识
     * @param groupMchntNo 集团商户号
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectBspsMchntBaseInfoByGroupMchntNo(String instId, String groupMchntNo) throws Exception;

    /**
     * 根据代理商商户号查询商户基本信息
     *
     * @param instId       多法人标识
     * @param agentMchntNo 代理商商户号
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectBspsMchntBaseInfoByAgentMchntNo(String instId, String agentMchntNo) throws Exception;


    /**
     * 根据代理商商户号查询商户统计信息
     *
     * @param instId       多法人标识
     * @param agentMchntNo 代理商商户号
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectBspsMchntBaseInfoGroupByAgentMchntNo(String instId, String agentMchntNo) throws Exception;

    /**
     * 根据拓展经理查询商户基本信息
     *
     * @param instId    多法人标识
     * @param managerId 拓展经理
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectBspsMchntBaseInfoByManagerId(String instId, String managerId) throws Exception;

    /**
     * 根据拓展经理查询待认证商户基本信息
     *
     * @param instId    多法人标识
     * @param managerId 拓展经理
     * @param pageInfo  分页信息
     * @return 商户基本信息
     * @throws Exception 异常
     */
    PageResult selectBspsMchntBaseInfoNeedAuthByManagerId(String instId, String managerId, PageInfo pageInfo) throws Exception;

    /**
     * 根据拓展经理查询商户基本信息
     *
     * @param instId    多法人标识
     * @param managerId 拓展经理
     * @param startDate 开始时间
     * @param endDate   截止时间
     * @return 商户基本信息
     * @throws Exception 异常
     */
    PageResult selectBspsMchntBaseInfoByManagerIdAndDate(String instId, String managerId, String startDate, String endDate, PageInfo pageInfo) throws Exception;

    /**
     * 根据拓展经理查询商户统计信息
     *
     * @param instId    多法人标识
     * @param managerId 拓展经理
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectBspsMchntBaseInfoGroupByManagerId(String instId, String managerId, String month) throws Exception;

    /**
     * 根据拓展经理查询商户统计信息
     *
     * @param instId    多法人标识
     * @param managerId 拓展经理
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectBspsMchntBaseInfoGroupByManagerIdAndDate(String instId, String managerId, String startDate, String endDate) throws Exception;

    /**
     * 根据签约机构查询商户基本信息
     *
     * @param instId     多法人标识
     * @param signInstId 商户签约机构
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectBspsMchntBaseInfoBySignInstId(String instId, String signInstId) throws Exception;

}
